src/p_mach.cpp: make sort order deterministic
This commit is contained in:
+3
-8
@@ -562,8 +562,6 @@ PackMachBase<T>::compare_segment_command(void const *const aa, void const *const
|
|||||||
unsigned const xb = b->cmd - lc_seg;
|
unsigned const xb = b->cmd - lc_seg;
|
||||||
if (xa < xb) return -1; // LC_SEGMENT first
|
if (xa < xb) return -1; // LC_SEGMENT first
|
||||||
if (xa > xb) return 1;
|
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
|
// Ascending by .fileoff so that find_SEGMENT_gap works
|
||||||
if (a->fileoff < b->fileoff)
|
if (a->fileoff < b->fileoff)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -573,15 +571,12 @@ PackMachBase<T>::compare_segment_command(void const *const aa, void const *const
|
|||||||
if (a->vmaddr < b->vmaddr) return -1;
|
if (a->vmaddr < b->vmaddr) return -1;
|
||||||
if (a->vmaddr > b->vmaddr) return 1;
|
if (a->vmaddr > b->vmaddr) return 1;
|
||||||
// Descending by .vmsize
|
// 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))
|
||||||
// if ((a->vmsize != 0) != (b->vmsize != 0))
|
return (a->vmsize != 0) ? -1 : 1;
|
||||||
// return (a->vmsize != 0) ? -1 : 1;
|
|
||||||
if (a->vmsize) return -1; // 'a' is first
|
|
||||||
if (b->vmsize) return 1; // 'a' is last
|
|
||||||
// What could remain?
|
// What could remain?
|
||||||
|
// try to make sort order deterministic and just compare more fields
|
||||||
#define CMP(field) \
|
#define CMP(field) \
|
||||||
if (a->field != b->field) return a->field < b->field ? -1 : 1
|
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(vmsize);
|
||||||
CMP(cmdsize);
|
CMP(cmdsize);
|
||||||
CMP(filesize);
|
CMP(filesize);
|
||||||
|
|||||||
Reference in New Issue
Block a user