X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=driver%2Ffirm_machine.c;h=7c016fb09c959642c20e91616b53552832787c86;hb=451c15e3a53e601d449512e71b1a9ab7960fa9ec;hp=de1bf77a7b6571905074d8da409e9eb6ad0ab08f;hpb=15928499880c5cbb6d978860d097fbc84066909e;p=cparser diff --git a/driver/firm_machine.c b/driver/firm_machine.c index de1bf77..7c016fb 100644 --- a/driver/firm_machine.c +++ b/driver/firm_machine.c @@ -14,6 +14,17 @@ static void set_be_option(const char *arg) assert(res); } +static ir_entity *underscore_compilerlib_entity_creator(ident *id, ir_type *mt) +{ + ir_entity *entity = new_entity(get_glob_type(), id, mt); + ident *ldname = id_mangle3("_", id, ""); + + set_entity_visibility(entity, ir_visibility_external); + set_entity_ld_ident(entity, ldname); + + return entity; +} + /** * Initialize firm codegeneration for a specific operating system. * The argument is the operating system part of a target-triple @@ -27,8 +38,10 @@ static bool setup_os_support(const char *os) set_be_option("ia32-gasmode=macho"); set_be_option("ia32-stackalign=4"); set_be_option("pic=true"); + set_compilerlib_entity_creator(underscore_compilerlib_entity_creator); } else if (strstr(os, "mingw") != NULL || streq(os, "win32")) { set_be_option("ia32-gasmode=mingw"); + set_compilerlib_entity_creator(underscore_compilerlib_entity_creator); } else { return false; }