Try giving Link a variable called rolling which, when true, none of the other movement code will work.
When you press the roll button, and you're not in the middle of some other action such as a sword attack, set rolling to true, image_index to 0, and sprite_index to the rolling sprite for the direction he's facing.
In Step, if rolling is true, first check which way you're facing. I don't know if you use direction, or your own custom variable, but here my suggestion is to make two temporary variables.
var roll_x, roll_y;
These will be how far you move relatively when you're rolling. If you're facing up, set roll_y to -4 and roll_x to 0. If you're facing right, set roll_y to 0 and roll_x to 4. And so on.
Then, check:
if place_free(x+roll_x, y+roll_y) {
And if so, add roll_x to x, and add roll_y to y.
} else {
Otherwise, you've hit a solid, so play a collision sound and set rolling to false and change back the sprite. Or if you want, you can keep rolling true so that you still can't move, and set the sprite to a fallen-over Link, and an Alarm that will make him stand up after half a second or so.
Lastly, in the Animation End event, if rolling is true then set it to false, and change the sprite back into standing.