Feeds:
Posts
Comments

Archive for March, 2008

GDB version 6.8 was released just a few days ago. I’m happy to have made my small contribution to it, mostly with development of decimal floating point debugging support. From the NEWS file:

“GDB now supports debugging C and C++ programs which use the Decimal Floating Point extension. In addition, the PowerPC target now has a set of pseudo-registers to inspect decimal float values stored in two consecutive float registers.”

The feature was actually developed by several folks. Ben Elliston started working on the feature, and then passed it on to Wu Zhou. I took up where Wu Zhou left and implemented more complete support for decimal float types. Luis Machado also helped me and posted some patches of his own. The work amounted to a total of about 12 patches.

It means that you can now use GDB (version 6.8 or later) to debug programs which make use of the proposed C extension for decimal floating-point arithmetic (i.e., the _Decimal32, _Decimal64 and _Decimal128 types). The first GCC release with support for this extension was GCC 4.2.

Why is decimal floating point useful? It avoids the unexpected surprises and rounding errors which inevitably come with binary floating point. It’s not that decimal float is more exact or precise, it’s just that it behaves just like we are used to and were thought in school in terms of representation and rounding.

GDB itself can provide an example:

(gdb) p 1.2l
$1 = 1.2000000000000000000433680868994202
(gdb) ptype 1.2l
type = long double
(gdb) p 1.2dl
$2 = 1.2
(gdb) ptype 1.2dl
type = _Decimal128

You can see that the actual value used to represent 1.2 in binary floating point is slightly larger than 1.2. Why is that? It’s because to express 0.2 in binary float you need an infinite number of digits, so what ends up being stored is the closest number possible to represent in binary. The difference is almost nothing, but this error will propagate in computations and eventually be big enough to be noticed. That’s why in some application domains (e.g., finance and civil construction), you are actually required by law to use decimal floating point to perform calculations.

More information about decimal float can be found in Mike Cowlishaw’s page.

Advertisements

Read Full Post »

Esses dias vi o filme “O Grande Ditador”, do Charles Chaplin. É uma sátira a Adolf Hitler e à Alemanha Nazista do final da década de 30.

É um filme impressionante, em vários aspectos. Um deles é que foi lançado em 1940, ou seja: muitos anos antes do final da 2ª Guerra Mundial. Nessa época, os EUA (onde o filme foi produzido) ainda estavam oficialmente em paz com a Alemanha, e muitos insistiram que Chaplin desistisse do projeto. Inclusive diretores judeus de Hollywood, que temiam represália do governo aos judeus que viviam na Alemanha na época.

Outro aspecto impressionante é que o filme retrata de forma muito franca o tratamento discriminatório e violento dado aos judeus pelos nazistas, e é ao mesmo tempo uma comédia com “gags” e piadas misturadas a cenas revoltantes de autoritarismo. Eu particularmente achei o filme bastante esquisito por isso e não gostei muito, por achar que tratava de um tema muito pesado de forma leviana. De fato, Charles Chaplin depois disse que se soubesse na época de toda a extensão do horror causado pelos nazistas aos judeus, não teria feito o filme.

Isso é desculpável, pois na época os aliados não tinham noção do que os judeus estavam começando a passar nas mãos dos nazistas. Os guetos judeus estavam apenas começando a ser formados, assim como os campos de concentração (Auschwitz foi fundado em 1940). Os aliados só começariam a ter notícias do que ocorria dentro dos campos de concentração e dos campos de extermínio (sim, são coisas diferentes) a partir de 1942.

Por fim, impressiona também o fato de Charles Chaplin ter usado seu próprio dinheiro para fazer essa produção de alto risco (temia-se que o filme seria boicotado e censurado antes mesmo do lançamento), e fez isso por ideologia, para lutar com as armas que tinha (sua fama, e o humor) contra alguém que precisava ser combatido.

Read Full Post »

I’ve been working on Python bindings for exposing GDB’s frame_info, the internal structure it uses to keep track of the frame stack in the debuggee (or inferior, in GDB parlance). I got just enough working to be able to implement an equivalent of GDB’s backtrace command entirely in Python. The difference is that my version of the command prints older frames first and newer last, which feels more natural to me. 🙂

Here’s the output I get:

(gdb) rbt
#2 0x080483bb in main at ../../src/examples/funcs.c:15
#1 0x08048391 in f1 at ../../src/examples/funcs.c:10
#0 f2 at ../../src/examples/funcs.c:5
(gdb)

A little bit more information, and the definition of the Python command which does the above can be found in my post to the mailing list. The code is on the git repo for the Python work.

Read Full Post »

Cool, Ian Taylor (who wrote the current linker used in Linux) just announced that gold, the new linker that he has been writing, was just released. It targets only ELF systems, so I believe its design is much simplified and streamlined by this.

I find it interesting that he chose to implement it in C++. I’m glad that the “let’s do it in C because everybody knows it” mantra that so frequently determines the programming language of open source projects doesn’t always prevail. Perhaps this will help weaken the argument?

And yes, I know about KDE. It’s the exception that proves the rule. 😀
Besides, don’t forget that GNOME, the project created to react to it is in C, using the horrible GObject monstrosity.

Read Full Post »

Acabei de escutar “Luis Inácio”, dos Paralamas. Eu acho (agradavelmente) impressionante que uma banda escreva uma letra tão direta, agressiva e dando nomes aos bois como essa e além disso consiga produzi-la, vender CDs e fazer shows por aí com ela.

Expressa muito bem o que todo mundo pensa sobre os políticos e a política brasileira. É uma pena que a letra, de mais de 10 anos atrás, continue atual. 😦

Comentando alguns trechos:

” Brasília é uma ilha, eu falo porque eu sei
Uma cidade que fabrica sua própria lei
Aonde se vive mais ou menos como na Disneylândia
Se essa palhaçada fosse na Cinelândia
Ia juntar muita gente pra pegar na saída”

Isso é muito verdade. Um professor meu do segundo grau (infelizmente esqueci quem) falou que a maior desgraça que aconteceu no Brasil foi mudar a capital do Rio de Janeiro para Brasília, aquele lugar isolado. Eu concordo em gênero, número e grau. Com certeza ia ter muito mais manifestações e protestos contra toda essa palhaçada que acontece se a capital fosse no Rio ou em São Paulo. E certamente ia também “juntar muita gente pra pegar na saída”!

” Ao permitir que num país como o Brasil
Ainda se obrigue a votar por qualquer trocado
Por um par se sapatos, um saco de farinha
A nossa imensa massa de iletrados
Parabéns, coronéis, vocês venceram outra vez
O congresso continua a serviço de vocês”

Outra grande desgraça para o Brasil, o voto obrigatório. Não acho que tenho que falar mais do que já está na letra. Quando isso vai acabar?

E para colocar o último prego no caixão, a triste ironia: a frase que inspirou a música foi dita pelo nosso atual presidente da república, na época reclamando do governo Itamar. Ele assumiu o lugar do dito cujo, mas os picaretas ainda estão lá. E mais picaretas foram chamados (haja vista o inchaço da máquina pública).

Read Full Post »

It seems the planets are finally aligning to get Python scripting support in GDB! Vladimir published his changes last month, Tromey improved on them, and I joined the bandwagon.

The work is being done in a git repo hosted by gitorious. More details here.

This looks very promising.

Update – 2008/03/15: Sorry, I was a bit cryptic in this post. It’s not really about enabling debug of Python programs using GDB (which is a neat idea, and I hope to play with it sometime). It’s about integrating a Python interpreter into GDB and exposing its internals as an API to be used by Python scripts. This will enable people to automate and extend GDB functionality using Python. This feature has been asked many times before, and finally is being addressed. Should open many possibilities.

Read Full Post »

autoconf tip

I always dreaded having to do modifications in Makefile.in (e.g., adding a new file to the compilation) because then I’d have to nuke the build directory (you do build your project outside of the source tree, right? 😉 ) and run configure again for the Makefile to be generated and then rebuild everything again.

Well, of course this is a dumb approach to the problem, and today I just found out (almost by accident) the smarter way to do it: run the config.status script in the build directory. It will regenerate the Makefile and you can just type make from there, compiling or recompiling just what’s needed.

Read Full Post »

Older Posts »