# Ldflags

## ago

ciao a tutti...  :Very Happy:  è da tempo che uso le ldflags e devo dire che l'ottimizzazione va meglio...ma leggendo:

```
man ld
```

mi accorgo che ce ne sono svariate...e desideravo avere un'ottimizzazione maggiore aggiungendone qualcun'altra..ma onde evitare di fare test gradirei sapere se potete consigliarmene qualcuna voi che usate e non crea problemi e/o instabilità...per ora ho:

```
"-Wl,-O1 -Wl,--as-needed -Wl,--hash-style=gnu -Wl,--sort-common"
```

grazie in anticipo per le risposte   :Smile: 

----------

## mack1

Ciao anche io uso le LDFLAGS e non incappo in problemi da un bel pezzo (uso kde3/4,xfce e E17  :Cool:  ), comunque qui trovi il numero dei bug segnalati in relazione a "--as-neened":

https://bugs.gentoo.org/show_bug.cgi?id=129413

E qui ci sono le "safe ldfags" di gentoo wiki:

http://en.gentoo-wiki.com/wiki/Safe_LDFLAGS

Le tue mi sembrano sicure (imho), visto poi che gentoo attiva di default solo "-Wl,-O1" la tua è già un'ottimizzazione "spinta", io di più non farei (ameno che tu non voglia sperimentare, mettendo in conto la possibilità di rompere il sistema).

Ciao

----------

## K.a.o.s.

Le mie sono:

```
LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,-z,combreloc -Wl,--hash-style=gnu"

```

Per ora nessun problema (~amd64, sia Gnome che Kde), tranne uno con Gimp poco tempo fa. Ovviamente sono, come detto da mack1, da considerarsi "spinte".

Combreloc la sto utilizzando da relativamente poco (qualche mese) per provare e mi sembra porti un buon incremento. Non so dirne però oggettivamente i vantaggi e gli svantaggi, quindi se qualcuno sa qualcosa in proposito... si faccia avanti   :Razz: .

Se vuoi qualcosa per una maggiore stabilità, puoi usare now al posto di combreloc, visto che carica i simboli all'avvio (avvio più lento) e... se c'è qualcosa di rotto, non parte proprio l'applicazione  :Wink:  evitando crash durante l'esecuzione.

----------

## table

 *mack1 wrote:*   

> 
> 
> Le tue mi sembrano sicure (imho), visto poi che gentoo attiva di default solo "-Wl,-O1"
> 
> 

 

mi intrometto, cosa intendi con questa frase? Intendi che se non specifico alcuna LDFLAGS è come se impostassi "-Wl,-O1" nel make.conf?

----------

## mack1

@table 

Esatto fanno parte del profilo e vengono impostate di default (controlla con un "emerge --info"  :Wink:  ), se vuoi disabilitarle devi aggiungere a make.conf:

```

LDFLAGS=""

```

Vedo che anche con un profilo hardened sono abilitate di delault e non danno problemi  :Cool: , quindi credo siano sicure  :Cool: .

Ciao

----------

## ago

mm bene di nuovo leggo zombreloc, e poi dopo un occhiatina in giro ho trovato --relax --no-keep-memory e Wl,--export-dynamic....vediamo cosa esce fuori di nuovo  :Smile: 

----------

## djinnZ

 *ago88 wrote:*   

> -Wl,--hash-style=gnu -Wl,--sort-common

 già non sono del tutto sicure, o meglio possono dare qualche problema con alcuni pacchetti. Tieni conto che tutte le ldflag, a parte -O1 e --as-needed (che sono in fase di stabilizzazione e prima o poi diventeranno di default), sono non supportate e non è detto che diano benefici.

Il discorso vale in generale per tutte le ottimizzazioni, anche quelle del compilatore, ed alcuni pacchetti hanno seri problemi; al momento negli ebuild non è previsto il mascheramento delle ottimizzazioni dannose del linker, questo vuol dire non supportate.

A livello di codice dei singoli pacchetti quasi tutte le ottimizzazioni non sono supportate ovvero non sono previste di default nel makefile e gli autotool non disabilitano quelle dannose.

In generale sarebbe una buona idea usare una ottimizzazione per pacchetto ed evitare di toccare la toolchain se proprio vuoi sbizzarrirti.

----------

## ago

@djinnZ

In generale uso quelle flag da quasi un anno e non ho mai avuto un problema ( o se meglio vogliamo dire un problema noto... )

Cmq in caso mi dovessero capitare problemi e/o errori prima di postare ricompilo comentando le ldflags!

----------

## devilheart

usare -Wl,--hash-style=both aumenta la dimensione dei files?

----------

## ago

sul man non dice nulla...

----------

## K.a.o.s.

 *Quote:*   

> usare -Wl,--hash-style=both aumenta la dimensione dei files?

 

Fai prima a provare con un pacchetto, a occhio direi di sì   :Wink: , visto che per mantenere la retrocompatilibità tiene due tabelle degli hash.

----------

## table

ho impostato da qualche giorno:

```
LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,-z,combreloc -Wl,--hash-style=gnu"
```

non ho notato grossi cambiamenti, né in prestazioni né in stabilità del sistema  :Confused: 

----------

## ago

ma hai ricompilato qualche pacchetto dopo aver messo le flag?

----------

## table

 *ago88 wrote:*   

> ma hai ricompilato qualche pacchetto dopo aver messo le flag?

 

sì, ho ricompilato tutto il sistema

----------

## riverdragon

Ma infatti le uniche ldflags che mostrano una differenza sensibile sono -Wl,--as-needed, le altre sono opzioni poco chiare, non si capisce bene che vantaggi diano, e fanno parte di quella "zona nera" dove uno giura che migliorino le performance del sistema ma nessun altro riesce a replicare gli stessi risultati.

----------

## djinnZ

Direi più che come portano benefici su alcuni pacchetti ma in ogni caso mettono a rischio la possibilità di compilare correttamente, quindi sarebbe bene tenerle lontano da libc/gcc e simili.

----------

## ago

 *djinnZ wrote:*   

> Direi più che come portano benefici su alcuni pacchetti ma in ogni caso mettono a rischio la possibilità di compilare correttamente, quindi sarebbe bene tenerle lontano da libc/gcc e simili.

 

puoi sempre creare package.ldflags come indica qui.. http://en.gentoo-wiki.com/wiki/Safe_LDFLAGS#Per_package_LDFLAGS .magari a tutto il system non applichi ldflags

----------

## !equilibrium

 *table wrote:*   

> LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,-z,combreloc -Wl,--hash-style=gnu"

 

giusto per fare chiarezza su un paio di cose:

- -Wl,-O1 migliora le performance (poco);

- -Wl,--as-needed migliora le performance (sensibilmente);

- -Wl,--sort-common pericoloso;

- -Wl,-z,now non apporta nessun miglioramento di performance, ma è molto utile per scovare subito problemi nelle librerie, le quali non vengono compilate se ci sono problemi di linking (anzichè compilarle e farti poi impazzire con i segfault);

- -Wl,-z,combreloc pericoloso;

- -Wl,--hash-style=gnu migliora le performance (sensibilmente);

detto ciò, va aggiunto che i miglioramenti sensibili delle performance si riducono un bel po quando si hanno DualCore, QuadCore, SixCore e mostri del genere, visto che tutto è notoriamente iper-veloce e quindi le migliorie non sono nemmeno percettibili perchè si riducono a millisecondi (questo non vuol dire che le ottimizzazioni del linker non vanno usate sulle moderne arch, perchè comunque si risparmia moltissima RAM e spazio su disco).

----------

## K.a.o.s.

Solo per curiosità, non per protestare o sostenere qualcosa  :Wink: , perchè -Wl,combreloc sarebbe pericolosa?

----------

## !equilibrium

 *K.a.o.s. wrote:*   

> Solo per curiosità, non per protestare o sostenere qualcosa , perchè -Wl,combreloc sarebbe pericolosa?

 

l'ho scritto apposta per provocazione, voglio vedere chi sa darmi una motivazione plausibile per abilitarlo   :Cool: 

----------

## Kernel78

 *!equilibrium wrote:*   

>  *K.a.o.s. wrote:*   Solo per curiosità, non per protestare o sostenere qualcosa , perchè -Wl,combreloc sarebbe pericolosa? 
> 
> l'ho scritto apposta per provocazione, voglio vedere chi sa darmi una motivazione plausibile per abilitarlo  

 

la curiosità la consideri una motivazione plausibile ?

----------

## !equilibrium

 *Kernel78 wrote:*   

> la curiosità la consideri una motivazione plausibile ?

 

ok, non la tiro troppo per le lunghe: -z,combreloc è abilitata di default in binutils dal lontano 2001 quindi metterla in LDFLAGS, oltre ad essere ridondante, non produce nessun miglioramento di performance; quindi chi ha asserito che combreloc fa miraloci, se li è sognati la notte.

----------

## K.a.o.s.

 *Quote:*   

> -z,combreloc è abilitata di default in binutils dal lontano 2001

 

 :Surprised: 

Ma non era lazy di default?

 *Quote:*   

> lazy
> 
>                When generating an executable or shared  library,  mark  it  to
> 
>                tell  the  dynamic  linker to defer function call resolution to
> ...

 

O i dev di Gentoo l'hanno abilitata in maniera forzata?

----------

## riverdragon

 *!equilibrium wrote:*   

> - -Wl,--sort-common pericoloso;

 Stesse motivazioni di 'combreloc' o questa volta è pericoloso sul serio? Da me è abilitata da un bel pezzo (non ricordo il motivo sinceramente).

----------

## !equilibrium

 *K.a.o.s. wrote:*   

> Ma non era lazy di default?
> 
> O i dev di Gentoo l'hanno abilitata in maniera forzata?

 

non cercare di rigirare la frittata, io non ho mai parlato dei devel gentoo, ho detto che è il default in binutils, quindi è il default per tutte le distro linux, non solo per Gentoo; direttamente dal ChangeLog di binutils:

 *Quote:*   

> Changes from binutils 2.11.93.0.2:
> 
> 1. Update from binutils 2002 0307.
> 
> 2. Add the .preinit_array/.init_array/.fini_array support.
> ...

 

----------

## !equilibrium

 *riverdragon wrote:*   

>  *!equilibrium wrote:*   - -Wl,--sort-common pericoloso; Stesse motivazioni di 'combreloc' o questa volta è pericoloso sul serio? Da me è abilitata da un bel pezzo (non ricordo il motivo sinceramente).

 

hai memoria breve però perchè alla stessa domanda ti era già stata data risposta.

----------

## K.a.o.s.

 *Quote:*   

> non cercare di rigirare la frittata, io non ho mai parlato dei devel gentoo

 

Sinceramente non era mia intenzione...   :Wink: , io l'avevo abilitata vedendo vecchi post sul forum e poi leggendo il man di ld. Quindi, è possibile abbinare più -Wl,-z? Perchè ho idea che il mio errore stia qui, ovvero credendo possibile attivarne una alla volta.

Avevo parlato di dev, pensando fosse una storia simile a --enable-new-dtags, ma non c'entra in questo caso  :Smile: .

----------

## riverdragon

 *!equilibrium wrote:*   

> hai memoria breve però perchè alla stessa domanda ti era già stata data risposta.

 Non mi sembra, a meno che tu non consideri un "...se non ricordo male" e un "non l'ho mai usato di persona [...] causa di problemi da parte di altri..." di 21 mesi fa come risposte definitive - soprattutto a fronte dell'assenza di problemi capitatimi. La stessa opzione --as-needed un paio d'anni fa originava problemi, adesso è addirittura quasi-default, quindi credo che la mia domanda rimanga valida.

----------

