[OSy] include stdarg.h pri -nostdinc

Petr Onderka gsvick at gmail.com
Mon Oct 28 21:12:01 CET 2013


V zadání je explicitně uvedené, že se mají použít __builtin konstrukce:

> Pro implementaci variadickych funkci jsou potreba funkce
> va_start(), va_arg(), va_end() apod. Neni prilis vhodne tyto funkce
> implementovat rucne (prochazenim zasobniku), protoze tim se nezaruci
> shoda chovani techto funkci s chovanim prekladace (napr. v pripade
> zmeny ABI). Vhodnejsi je vyuzit builtin funkci a typu pro implementaci
> variadickych funkci a typu, ktere poskytuje primo prekladac
> (__builtin_va_list, __builtin_va_start atd.).

Petr Onderka

2013/10/28 Jan Smrčina <lj at fooboo.org>:
> Zdravim vsechny,
>
> mam takovy problem s inkluzemi. Pro implementaci pozadovane funkce
> printk()  je treba nastroju pro praci s variadickymy argumenty. Standard
> jazyka C uvadi, ze prislusna makra a datovy typ jsou uvedeny v souboru
> stdarg.h.
>
> A zde je muj problem. V makefilech je (zrejme z dobrych duvodu)
> prekladac volan s direktivou -nostdinc, ktera rika:
>
> "do not look for standard header files in system directories"
>
> Pritom ale  stdarg.h  je standardni header file, schovany v adresari
> toolchainu.
>
>
> Trivialni reseni zrejme je:
>
> #include "/usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.7.2/include/stdarg.h"
>
> ale to ma zrejmy nedostatek, ze nemuze fungovat na strojich s
> cross-compilerem v jinem adresari.
>
>
> Druhe reseni, ktere se nabizi, je pridat prislusne definice primo do
> kodu:
>
> typedef __builtin_va_list __gnuc_va_list;
> typedef __gnuc_va_list va_list;
> #define va_start(v,l)   __builtin_va_start(v,l)
> #define va_end(v)       __builtin_va_end(v)
> #define va_arg(v,l)     __builtin_va_arg(v,l)
> #define va_copy(d,s)    __builtin_va_copy(d,s)
>
> Problem tohoto druheho reseni je zrejma ne-zcela prenositelnost mezi
> kompilatory
>
>
> Idealni reseni by bylo primet kompilator, aby pro tento jeden jediny
> soubor udelal vyjimku z  -nostdinc  pozadavku, ale takove reseni jsem
> zatim nedokazal vymyslet.
>
> Ma otazka tedy je:  Jak na idealni reseni? A pokud takove reseni neni
> rozumne implementovatelne, je druhe reseni prijatelne (i kdyz se mi
> osobne nelibi)?
>
> Diky,
> Jan Smrcina
>
> _______________________________________________
> OSy mailing list
> OSy at d3s.mff.cuni.cz
> https://d3s.mff.cuni.cz/mailman/listinfo/osy
>




More information about the NSWI004 mailing list