diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 2ebac2dd..988113d2 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -562,8 +562,6 @@ PackMachBase::compare_segment_command(void const *const aa, void const *const unsigned const xb = b->cmd - lc_seg; if (xa < xb) return -1; // LC_SEGMENT first if (xa > xb) return 1; -// mfx @jreiser: we do not want to return 0; please check -//// if (0 != xa) return 0; // not LC_SEGMENT // Ascending by .fileoff so that find_SEGMENT_gap works if (a->fileoff < b->fileoff) return -1; @@ -573,15 +571,12 @@ PackMachBase::compare_segment_command(void const *const aa, void const *const if (a->vmaddr < b->vmaddr) return -1; if (a->vmaddr > b->vmaddr) return 1; // Descending by .vmsize -// mfx @jreiser: I think this may violate cmp(a,b) == -cmp(b,a); please check -// if ((a->vmsize != 0) != (b->vmsize != 0)) -// return (a->vmsize != 0) ? -1 : 1; - if (a->vmsize) return -1; // 'a' is first - if (b->vmsize) return 1; // 'a' is last + if ((a->vmsize != 0) != (b->vmsize != 0)) + return (a->vmsize != 0) ? -1 : 1; // What could remain? + // try to make sort order deterministic and just compare more fields #define CMP(field) \ if (a->field != b->field) return a->field < b->field ? -1 : 1 - // try to make sort order deterministic and just compare more fields CMP(vmsize); CMP(cmdsize); CMP(filesize);