[PATCH] newlib: Remove debug flag for --enable-target-optspace

Stephanos Ioannidis root@stephanos.io
Sat Nov 30 05:32:00 GMT 2019


Hi Andrew and Jon,

> Actually you are wrong.  --enable-target-optspace changes the (normal)
CFLAGS to be "-g -O2 -g -Os".  The "-g" in the config/mt-ospace is
redundant now.

It does seem that way (very messy though ...).

> The reasoning Stephanos is giving of removing the "-g" there is not
correct though.

If you are overriding CFLAGS for other purposes and want to _only_ enable `-Os`, you cannot use `--enable-target-optspace` because it has an unwanted side effect of enabling debug information output alongside optimisation for size. After all, the option is called `--enable-target-optspace`, not `--enable-target-optspace-and-debug-info`.

What is more frustrating is that the documentation for `--enable-target-optspace` mentions nothing about enabling debug information output and this can be very confusing and misleading to users; I spent hours trying out many different build options in attempt to figure out why the compiled libraries included debug information in spite of never being instructed to do so, until I finally decided to have a look at the newlib build scripts.

*By removing `-g` in `mt-ospace`, we can support both cases:*

1. CFLAGS is not overridden: Since the default CFLAGS is `-g -O2`, `-Os` will override`-O2` to optimise for size. 
2. CFLAGS is overridden: It will simply add `-Os` to optimise for size. If user wanted debug information output, he/she will add "-g" in the CFLAGS separately.

One could possibly argue that user can simply put `-Os` in the overridden CFLAGS instead of using `--enable-target-optspace`, but that is not a valid excuse for the latter to misbehave.

> Because many people want to be able to debug their code!

Some might, some might not- especially if they are compiling newlib to be used by someone else, which would often be the case; the debug information is not very useful unless you have a local copy of the newlib source code.

For instance, GNU ARM Embedded build script is setting CFLAGS to `-Os` instead of using `--enable-target-optspace` because the latter is not achieving the intended behavior.

More importantly, I do not think any normal average person would somehow automatically assume `--enable-target-optspace` must mean enabling both optimisation for size and debugging information output!

Regards,

Stephanos
________________________________________
From: Andrew Pinski <pinskia@gmail.com>
Sent: 30 November 2019 10:13
To: Jon Beniston <jon@beniston.com>
Cc: Stephanos Ioannidis <root@stephanos.io>; <newlib@sourceware.org> <newlib@sourceware.org>
Subject: Re: [PATCH] newlib: Remove debug flag for --enable-target-optspace 
 
On Fri, Nov 29, 2019 at 3:19 AM Jon Beniston <jon@beniston.com> wrote:
>
> Hi Stephanos,
>
> >As you suggested, the debug information added by `--enable-target-optspace`
> can be stripped, but why add it in the first place if it is not necessary?
>
> Because many people want to be able to debug their code!
>
> >Unless there is a good reason to keep `-g` and `-Os` together in
> `--enable-target-optspace`,
> >I strongly believe `-g` should be removed and moved into a separate
> configuration option.
>
> Currently the default for CFLAGS_FOR_TARGET is "-g -O2".
> --enable-target-optspace Changes this to "-g -Os"

Actually you are wrong.  --enable-target-optspace changes the (normal)
CFLAGS to be "-g -O2 -g -Os".  The "-g" in the config/mt-ospace is
redundant now.
Please see https://gcc.gnu.org/ml/gcc-patches/2014-11/msg02062.html as
that changed CFLAGS from being destroyed to be additional.

The reasoning Stephanos is giving of removing the "-g" there is not
correct though.  I am saying the patch is correct but the REASON
behind of why it is correct is NOT.  The "-g" is redudant and can be
removed from config/mt-ospace.

Thanks,
Andrew Pinski

>
> If -g is to be controlled by a separate option, then it should apply in both
> cases. And this new option should probably be enabled by default to maintain
> existing behaviour (so perhaps add a --disable-target-debug option that
> removes -g)
>
> Cheers,
> Jon
>
>



More information about the Newlib mailing list