Smarter alignment checker.

pull/15/head
Jussi Pakkanen 11 years ago
parent 195fb0d967
commit 2a155072de
  1. 54
      environment.py

@ -228,48 +228,16 @@ Please define the corresponding variable {1} in your cross compilation definitio
return int(res.stdout)
def alignment(self, typename, env):
# A word of warning: this algoritm may be totally incorrect.
# However it worked for me on the cases I tried.
# There is probably a smarter and more robust way to get this
# information.
templ = '''#include<stdio.h>
#include<stddef.h>
#define SDEF(num) struct foo##num { char pad[num]; %s x; };
#define PR(num) printf("%%d\\n", (int)sizeof(struct foo##num))
SDEF(1)
SDEF(2)
SDEF(3)
SDEF(4)
SDEF(5)
SDEF(6)
SDEF(7)
SDEF(8)
SDEF(9)
SDEF(10)
SDEF(12)
SDEF(13)
SDEF(14)
SDEF(15)
SDEF(16)
SDEF(17)
struct tmp {
char c;
%s target;
};
int main(int argc, char **argv) {
PR(1);
PR(2);
PR(3);
PR(4);
PR(5);
PR(6);
PR(7);
PR(8);
PR(9);
PR(10);
PR(12);
PR(13);
PR(14);
PR(15);
PR(16);
PR(17);
printf("%%d", (int)offsetof(struct tmp, target));
return 0;
}
'''
@ -294,14 +262,10 @@ Please define the corresponding variable {1} in your cross compilation definitio
raise EnvironmentException('Could not compile alignment test.')
if res.returncode != 0:
raise EnvironmentException('Could not run alignment test binary.')
arr = [int(x) for x in res.stdout.split()]
for i in range(len(arr)-1):
nxt= arr[i+1]
cur = arr[i]
diff = nxt - cur
if diff > 0:
return diff
align = int(res.stdout)
if align == 0:
raise EnvironmentException('Could not determine alignment of %s. Sorry. You might want to file a bug.' % typename)
return align
def has_function(self, funcname, prefix, env):
# This fails (returns true) if funcname is a ptr or a variable.

Loading…
Cancel
Save